package br.com.sigad.servico;

import java.sql.Connection;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import br.com.sigad.dao.ConnectionFactory;
import br.com.sigad.dao.EmpresaDAO;
import br.com.sigad.dto.AssociadoDTO;
import br.com.sigad.dto.EmpresaDTO;

public class EmpresaService extends Service {

	public void gravarEmp(EmpresaDTO emp) throws Exception {
		Connection conn = null;
		try{
			conn = ConnectionFactory.getConnection();
			EmpresaDAO dao = new EmpresaDAO();
			dao.gravar(emp,conn);
		}catch(Exception e){
			throw new RuntimeException(e);
		}finally{
			fecharConexao(conn);
		}
	}
	
	public void alterarEmp(EmpresaDTO emp) throws Exception {
		Connection conn = null;
		try{
			conn = ConnectionFactory.getConnection();
			EmpresaDAO dao = new EmpresaDAO();
			dao.alterar(emp,conn);
			conn.commit();
		}catch(Exception e){
			throw new RuntimeException(e);
		}finally{
			fecharConexao(conn);
		}	
	}
	
	public boolean excluirEmp(EmpresaDTO emp) throws Exception {
		Connection conn = null;
		try{
			conn = ConnectionFactory.getConnection();
			EmpresaDAO dao = new EmpresaDAO();
			List<AssociadoDTO> resultado = dao.validaExcluir(emp, conn);
			if(!resultado.isEmpty()){
				FacesMessage mensagem = new FacesMessage("A Empresa possui Associados vinculados!");
				FacesContext.getCurrentInstance().addMessage(null, mensagem);
				return true;
			}else{
				dao.excluir(emp,conn);
				conn.commit();
				return false;
			}
		}catch(Exception e){
			throw new RuntimeException(e);
		}finally{
			fecharConexao(conn);
		}
	}
	
	public List<EmpresaDTO> pesquisarEmp(EmpresaDTO emp) throws Exception{
		Connection conn = null;
		try{
			conn = ConnectionFactory.getConnection();
			EmpresaDAO dao = new EmpresaDAO();
			return dao.pesquisar(emp, conn);
		}catch(Exception e){
			throw new RuntimeException(e);
		}finally{
			fecharConexao(conn);
		}
	}

	public List<EmpresaDTO> carregaEmpresas() {
		Connection conn = null;
		try{
			conn = ConnectionFactory.getConnection();
			EmpresaDAO dao = new EmpresaDAO();
			return dao.listar(conn);
		}catch(Exception e){
			throw new RuntimeException(e);
		}finally{
			fecharConexao(conn);
		}
	}

	public List<EmpresaDTO> verificaDuplicidade(EmpresaDTO empresa) {
		Connection conn = null;
		try{
			conn = ConnectionFactory.getConnection();
			EmpresaDAO dao = new EmpresaDAO();
			return dao.verificaDuplicidade(conn, empresa);
		}catch(Exception e){
			throw new RuntimeException(e);
		}finally{
			fecharConexao(conn);
		}
	}
	
	public EmpresaDTO recuperaNomeEmpresa(EmpresaDTO empresa) {
		Connection conn = null; 
		try{
			conn = ConnectionFactory.getConnection();
			EmpresaDAO dao = new EmpresaDAO();
			return dao.recuperaNomeEmpresa(empresa, conn);
		}catch(Exception e){
			throw new RuntimeException(e);
		}finally{
			fecharConexao(conn);
		}
	}
}
